/******************************** ************************ *********************************/
/********************************    JSON 字符串工具类     *********************************/
/********************************  map、json、object、数组 *********************************/
/******************************** ************************ *********************************/

import React, {Component} from 'react';

// JSON.parse()	    用于将一个 JSON 字符串转换为 JavaScript 对象。
// JSON.stringify()	用于将 JavaScript 值转换为 JSON 字符串。

//   Json     Object     map
//   Json     Object     array

class JsonUtil extends Component {
    // string ==> json
    static strToJson(data) {
        return JSON.parse(data);
    }
    // json ==> obj
    static jsonToObj(json){
        return JSON.parse(json);
    }
    // json ==> string
    static jsonToStr(data) {
        return JSON.stringify(data);
    }
    // array ==> json
    static arrayToJson(array) {
        return this.jsonToStr(array);
    }
    // array ==> obj
    static arrayToObj(array){
        return this.jsonToObj(this.arrayToJson(array));
    }
    // obj ==> map
    static objToMap(obj) {
        let strMap = new Map();
        for (let k of Object.keys(obj)) {
            strMap.set(k, obj[k]);
        }
        return strMap;
    }
    // obj ==> array
    static objToArray(obj){
        let jsonArr = [];
        for(let i =0 ;i < obj.length;i++){
            jsonArr[i] = obj[i];
        }
        return jsonArr;
    }
    // map ==> obj
    static mapToObj(map) {
        let obj = Object.create(null);
        for (let [k, v] of map) {
            obj[k] = v;
        }
        return obj;
    }
    // obj ==> json
    static objToJson(obj){
        return this.jsonToStr(obj);
    }
    // json ==> map
    static jsonToMap(json) {
        return JsonUtil.objToMap(this.jsonToObj(json));
    }
    // json ==> array
    static jsonToArray(json) {
        return this.objToArray(this.jsonToObj(json));
    }
    // map ==> json
    /*(转化后多了标识)
    {
        "0": {
            "title": "标题一",
            "subtitle": "周末五折起",
            "img1": "url1",
            "img2": "url1",
            "isShow": true
        },
        "1": {
            "title": "标题二",
            "subtitle": "限时抢购",
            "img1": "url1",
            "img2": "",
            "isShow": true
        },
        "2": {
            "title": "标题三",
            "subtitle": "大降价",
            "img1": "",
            "img2": "url1",
            "isShow": true
        },
        "3": {
            "title": "标题四",
            "subtitle": "品质好物",
            "img1": "",
            "img2": "",
            "isShow": true
        },
        "4": {
            "title": "标题五",
            "subtitle": "新东西",
            "img1": "url1",
            "img2": "url1",
            "isShow": true
        }
    }
    */
    static mapToJson(map) {
        return this.objToJson(this.mapToObj(map));
    }

}

export default JsonUtil;